package com.estronger.shopmanage.ui.order.until;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.media.ExifInterface;
import android.net.Uri;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.Base64;
import android.util.DisplayMetrics;
import android.view.ViewGroup;
import android.widget.ImageView;

import com.estronger.shopmanage.utils.ActivityUtils;
import com.estronger.shopmanage.utils.Toast;
import com.estronger.shopmanage.view.messagedialog.AlertDialog;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.util.Random;

/**
 * Created by Administrator on 2017-08-03.
 * 图片压缩工具
 */

public class PictureUtil {
    //计算图片的缩放值
    public static int calculateInSampleSize(BitmapFactory.Options options,int reqWidth, int reqHeight) {
        final int height = options.outHeight;
        final int width = options.outWidth;
        int inSampleSize = 1;

        if (height > reqHeight || width > reqWidth) {
            final int heightRatio = Math.round((float) height/ (float) reqHeight);
            final int widthRatio = Math.round((float) width / (float) reqWidth);
            inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;
        }
        return inSampleSize;
    }
    // 根据路径获得图片并压缩，返回bitmap用于显示
    public static Bitmap getSmallBitmap(String filePath) {
        final BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        BitmapFactory.decodeFile(filePath, options);

        // Calculate inSampleSize
        options.inSampleSize = calculateInSampleSize(options, 480, 800);

        // Decode bitmap with inSampleSize set
        options.inJustDecodeBounds = false;

        return BitmapFactory.decodeFile(filePath, options);
    }

    /*
压缩图片，处理某些手机拍照角度旋转的问题
*/
    public static void compressImage(Activity context,String filePath, int q, Compress compress) throws FileNotFoundException {
        String resultPath = null;
        String fileName = "";
        try {
            if(!(new File(filePath)).exists()){
                resultPath = null;
            }
            if (filePath.contains("_compress")) {
                resultPath = filePath;
            }

            Bitmap bm = getSmallBitmap(filePath);

            int degree = readPictureDegree(filePath);

            if (degree != 0) {//旋转照片角度
                bm = rotateBitmap(bm, degree);
            }
            String oldName = filePath.substring(filePath.lastIndexOf("/"), filePath.lastIndexOf("."));
            if(oldName.length()>40){
                Random random = new Random();
                int i = random.nextInt(1000);
                oldName = Tools.getSystime("yyyymmddHHmmss") + "_" + i;
            }
            fileName = oldName + "_compress.jpg";//★很奇怪oldName之前不能拼接字符串，只能拼接在后面，否则图片保存失败
            String saveDir = Environment.getExternalStorageDirectory()
                    + "/compress";
            File dir = new File(saveDir);
            if (!dir.exists()) {
                dir.mkdir();
            }
            if(bm==null){
                int success = Tools.CopySdcardFile(filePath,saveDir+"/"+oldName);
                if(success==1){
                    resultPath =  saveDir+"/"+oldName;
                }else{
                    resultPath =  filePath;
                }
            }else{
                // 保存入sdCard
                File outputFile=new File(saveDir,fileName);
                FileOutputStream out = new FileOutputStream(outputFile);
                bm.compress(Bitmap.CompressFormat.JPEG, q, out);
                resultPath =  outputFile.getPath();
            }
        }catch (Exception e){
            resultPath =  filePath;
        }
        compress.done(resultPath, fileName);
    }

    /**
     * 判断图片的角度
     */
    public static int readPictureDegree(String path) {
        int degree = 0;
        try {
            ExifInterface exifInterface = new ExifInterface(path);
            int orientation = exifInterface.getAttributeInt(
                    ExifInterface.TAG_ORIENTATION,
                    ExifInterface.ORIENTATION_NORMAL);
            switch (orientation) {
                case ExifInterface.ORIENTATION_ROTATE_90:
                    degree = 90;
                    break;
                case ExifInterface.ORIENTATION_ROTATE_180:
                    degree = 180;
                    break;
                case ExifInterface.ORIENTATION_ROTATE_270:
                    degree = 270;
                    break;
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return degree;
    }
    /**
     * 旋转照片
     */
    public static Bitmap rotateBitmap(Bitmap bitmap,int degress) {
        if (bitmap != null) {
            Matrix m = new Matrix();
            m.postRotate(degress);
            bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(),
                    bitmap.getHeight(), m, true);
            return bitmap;
        }
        return bitmap;
    }
    public static String SDPATH = Environment.getExternalStorageDirectory() + "/";//获取文件夹
    //删除文件
    public static void delFile(String dirStr,String fileName){
        try {
            File file = new File(SDPATH +  dirStr+"/"+ fileName);
            if(file.isFile()){
                file.delete();
            }
            file.exists();
        }catch (Exception e){}
    }
    //删除文件夹和文件夹里面的文件
    public static void deleteDir(String dirStr) {
        try {
            File dir = new File(SDPATH + dirStr + "/");
            if (dir == null || !dir.exists() || !dir.isDirectory())
                return;

            for (File file : dir.listFiles()) {
                if (file.isFile())
                    file.delete(); // 删除所有文件
                else if (file.isDirectory())
                    deleteDir(dirStr); // 递规的方式删除文件夹
            }
            dir.delete();// 删除目录本身
        }catch (Exception e){}
    }

    public static boolean fileIsExists(String path) {
        try {
            File f = new File(path);
            if (!f.exists()) {
                return false;
            }
        } catch (Exception e) {

            return false;
        }
        return true;
    }

    public interface Compress {
        /**
         * //压缩完成
         * @param compressPath
         * @param fileName
         */
        void done(String compressPath, String fileName);
    }
}
